<?php

/**
 * Description of RepoComprobante
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoComprobante extends Repositorio
{

  function __construct()
  {
    $this->tabla = "comprobante";
    $this->id = "idComprobante";
  }

  function agregar(Comprobante $comprobante)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . " (fechaHora, totalComprobante) values (";
//      $query .= "'" . $comprobante->getFechaHora() . "', ";
      $query .= "GETDATE(), ";
      $query .= $comprobante->getTotalComprobante() . ")";
      $result = $this->PostSQL($query);
      $id = $this->GetInsertedId();
      $comprobante->setId($id);
      if ($result)
      {
        if ($comprobante->getDetalleComprobante() != null)
        {
          $repoDetalleComp = new RepoDetalleComprobante();
          /* @var $detalle DetalleComprobante */
          foreach ($comprobante->getDetalleComprobante() as $detalle)
          {
            $detalle->setComprobante($id);
            $result = $repoDetalleComp->agregar($detalle);
            if (!$result)
            {
              $this->rollbackTransaction();
              return $result;
            }
          }
        }
      } else
      {
        $this->rollbackTransaction();
      }
      $repoReserva = new RepoReserva();
      if ($repoReserva->asignarComprobante($comprobante))
      {
        $this->commitTransaction();
      } else
      {
        $this->rollbackTransaction();
      }
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificar(Comprobante $comprobante)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "UPDATE " . $this->tabla . " SET ";
      $query .= "fechaHora = '" . $comprobante->getFechaHora() . "', ";
      $query .= "factura = " . $comprobante->getIdFactura() . ", ";
      $query .= "cargoHabitacion = " . $comprobante->getIdCargoHabitacion() . ", ";
      $query .= "deshabilitado = " . $comprobante->getDeshabilitado() . ", ";
      $query .= "WHERE " . $this->id . " = " . $comprobante->getId();
      $result = $this->PostSQL($query);
      $this->commitTransaction();
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function buscarComprobantesPendientes()
  {
    /**
     * @todo Los campos factura y cargoHabitacion están marcados como not null en la bd, creo que deberían ser nullables. 
     */
    $link = $this->OpenDB();
    $query = "SELECT idComprobante, fechaHora, nroComprobante, CONVERT(BIGINT, version) AS version
      FROM " . $this->tabla . " WHERE (factura IS NULL OR factura = 0) 
      AND (cargoHabitacion IS NULL OR cargoHabitacion = 0)";
//    $pendientes = mssql_query($query);
    $pendientes = $this->GetSQL($query);
    $this->CloseDB($link);
    $comprobantes = array();
    $repoDetComp = new RepoDetalleComprobante();
    if ($pendientes && count($pendientes) > 0)
    {
      for ($i = 0; $i < count($pendientes); $i++)
      {
        $comprobantes[$i] = new Comprobante();
        $comprobantes[$i]->setId($pendientes[$i]->idComprobante);
        $comprobantes[$i]->setNroComprobante($pendientes[$i]->nroComprobante);
        $comprobantes[$i]->setFechaHora($pendientes[$i]->fechaHora);
        $comprobantes[$i]->setDetalleComprobante($repoDetComp->buscarDetalles($pendientes[$i]->idComprobante));
      }
    }
    return $comprobantes;
  }

  function cerrarComprobante()
  {
    
  }

  function buscar($id)
  {
    $link = $this->OpenDB();
    $query = parent::buscar($id);
    $repoDetComp = new RepoDetalleComprobante();
    $comprobante = new Comprobante();
    $comprobante->setId($query[0]->idComprobante);
    $comprobante->setFechaHora($query[0]->fechaHora);
    $comprobante->setNroComprobante($query[0]->nroComprobante);
    $comprobante->setTotalComprobante($query[0]->totalComprobante);
    $comprobante->setDetalleComprobante($repoDetComp->buscarDetalles($query[0]->idComprobante));
    return $comprobante;
    $this->CloseDB($link);
  }

  function buscarPorFactura($id)
  {
    $link = $this->OpenDB();
    $queryTxt = "SELECT * FROM " . $this->tabla . " WHERE factura = " . $id;
    $query = $this->GetSQL($queryTxt);
    $repoDetComp = new RepoDetalleComprobante();
    $comprobante = new Comprobante();
    $comprobante->setId($query[0]->idComprobante);
    $comprobante->setFechaHora($query[0]->fechaHora);
    $comprobante->setNroComprobante($query[0]->nroComprobante);
    $comprobante->setTotalComprobante($query[0]->totalComprobante);
    $comprobante->setDetalleComprobante($repoDetComp->buscarDetalles($query[0]->idComprobante));
    return $comprobante;
    $this->CloseDB($link);
  }

  function cerrarCargoHabitacion($idComprobante, $idCargoHabitacion)
  {
    $query = "UPDATE " . $this->tabla . " SET cargoHabitacion = " . $idCargoHabitacion . " WHERE " . $this->id . " = " . $idComprobante;
    $result = $this->PostSQL($query);
    return $result;
  }

  function cerrarFactura($idComprobante, $idFactura)
  {
    $link = $this->OpenDB();
    $query = "UPDATE " . $this->tabla . " SET factura = " . $idFactura . " WHERE " . $this->id . " = " . $idComprobante;
    $result = $this->PostSQL($query);
    return $result;
    $this->CloseDB($link);
  }

}

?>
